/**
 *******************************************************************************
 * @file mbqueue.h
 * @brief 
 *******************************************************************************
*/
#ifndef MB_QUEUE_H
#define MB_QUEUE_H

#include "../MB_def.h"
#include <stdint.h>
#include <stdlib.h>

/**
 * @brief 实现mb_queue结构体
*/
typedef struct MB_Queue
{
    uint8_t *pData;         /* 队列中的数据 */
    size_t maxSize;         /* 队列的最大长度 */
    size_t currentSize;     /* 队列当前使用的长度 */
    size_t head;            /* 队头 */
    size_t tail;            /* 队尾 */
} MB_Queue;

/**
 * @brief 声明队列初始化函数
*/
MB_Status xMB_QueueInit(MB_Queue* pQueue, size_t maxQueueSize);

/**
 * @brief 声明队列操作函数
*/

/* 入队 */
MB_Status xMB_QueuePush(MB_Queue* pQueue, uint8_t data);
/* 出队 */
MB_Status xMB_QueuePop(MB_Queue* pQueue, uint8_t* pData);
/* 判断队列是否已满 */
MB_Status xMB_QueueIsFull(MB_Queue* pQueue, uint8_t *pIsFull);
/* 判断队列是否为空 */
MB_Status xMB_QueueIsEmpty(MB_Queue* pQueue, uint8_t *pIsEmpty);
/* 获取队首元素 */
MB_Status cMB_QueueGetHeadElement(MB_Queue* pQueue, uint8_t* pData);
/* 获取队尾元素 */
MB_Status cMB_QueueGetTailElement(MB_Queue* pQueue, uint8_t* pData);
/* 获取队列最大长度 */
MB_Status lMB_QueueGetMaxSize(MB_Queue* pQueue, size_t* pMaxSize);
/* 获取当前队列长度 */
MB_Status lMB_QueueGetCurrentSize(MB_Queue* pQueue, size_t *pCurrentSize);

#endif